# -*- coding: utf-8 -*-
#   文件说明
# @Time    ： 2025/11/11  14:27
# @Auther  ： 徐良
# File     :  config.py
# -*- coding: utf-8 -*-
"""
数据库配置定义
支持 SQLite / MySQL
"""

from dataclasses import dataclass
from typing import Optional


@dataclass(frozen=True)  # 不可变，便于哈希和缓存
class DBConfig:
    """
    数据库连接配置

    示例：
        sqlite_config = DBConfig(type='sqlite', path='data/app.db')
        mysql_config = DBConfig(
            type='mysql',
            host='localhost',
            port=3306,
            database='myapp',
            username='user',
            password='pass'
        )
    """
    type: str  # 'sqlite', 'mysql'
    path: Optional[str] = None  # SQLite 文件路径
    host: Optional[str] = None  # MySQL 主机
    port: Optional[int] = None  # MySQL 端口
    database: Optional[str] = None  # MySQL 数据库名
    username: Optional[str] = None
    password: Optional[str] = None

    def __post_init__(self):
        if self.type == 'sqlite':
            if not self.path:
                raise ValueError("SQLite 配置必须提供 path")
        elif self.type == 'mysql':
            if not all([self.host, self.database, self.username]):
                raise ValueError("MySQL 配置必须提供 host, database, username")
        else:
            raise ValueError(f"不支持的数据库类型: {self.type}")